/**
 * @file dns_server.h
 * @brief DNS服务器头文件
 * 
 * 该文件定义了简单的DNS服务器类，用于在Wi-Fi配置热点模式下
 * 实现强制门户功能，将所有DNS查询重定向到配置页面。
 * 
 * @author SiaZhang
 * @version 2.4.2
 */

#ifndef _DNS_SERVER_H_
#define _DNS_SERVER_H_

#include <string>
#include <esp_netif_ip_addr.h>

/**
 * @brief DNS服务器类
 * 
 * 实现简单的DNS服务器功能，用于强制门户：
 * - 监听UDP 53端口的DNS查询请求
 * - 将所有域名查询重定向到指定IP地址（通常是192.168.4.1）
 * - 支持启动和停止DNS服务
 * - 在独立任务中运行，不阻塞主线程
 */
class DnsServer {
public:
    /**
     * @brief 构造函数
     * 
     * 初始化DNS服务器实例，设置默认参数
     */
    DnsServer();

    /**
     * @brief 析构函数
     * 
     * 清理DNS服务器资源
     */
    ~DnsServer();

    /**
     * @brief 启动DNS服务器
     * 
     * @param gateway 网关IP地址，所有DNS查询将重定向到此地址
     * 
     * 创建UDP套接字，绑定到53端口，启动DNS处理任务
     */
    void Start(esp_ip4_addr_t gateway);

    /**
     * @brief 停止DNS服务器
     * 
     * 停止DNS服务，关闭套接字和处理任务
     */
    void Stop();

private:
    int port_ = 53;                     ///< DNS服务端口号（标准DNS端口）
    int fd_ = -1;                       ///< UDP套接字文件描述符
    esp_ip4_addr_t gateway_;            ///< 网关IP地址（重定向目标）

    /**
     * @brief DNS服务主循环
     * 
     * 在独立任务中运行，持续监听DNS查询请求：
     * 1. 接收DNS查询数据包
     * 2. 解析查询内容
     * 3. 构造响应数据包，指向网关IP
     * 4. 发送响应给客户端
     */
    void Run();
};

#endif // _DNS_SERVER_H_
